﻿Imports System.Data.Linq
Imports System.Linq

Public Class MBLRepository
    Private dc As New TanNamChinhDataContext

    Public Sub New()
        dc = GeneralClassDAL.dc
    End Sub

    Public Function GetMBLList() As IQueryable(Of tblMBL)
        Dim query As IQueryable(Of tblMBL) = From p In dc.tblMBLs
                    Select p
        Return query
    End Function

    'Public Function GetMBLList() As IQueryable
    '    Dim MBLs As IQueryable = (From p In dc.tblMBLs
    '                Select New With {p.ID_MBL, _
    '                                 p.MBLNo, _
    '                                 p.BookingNo, _
    '                                 p.tblVoyage.VoyageNo, _
    '                                 p.tblVoyage.tblVessel.tblLine.LineName, _
    '                                 p.tblVoyage.tblVessel.VesselName, _
    '                                 p.tblVoyage.ETA, _
    '                                 p.tblVoyage.ETD})

    '    Return MBLs
    'End Function

    Public Function SelectRecordById(ByVal id As Integer) As tblMBL
        Dim MBL = dc.tblMBLs.SingleOrDefault(Function(p As tblMBL) p.ID_MBL = id)
        Return MBL
    End Function

    Public Function Insert(ByVal obj As tblMBL) As tblMBL
        dc.tblMBLs.InsertOnSubmit(obj)
        dc.SubmitChanges()
        Return obj
    End Function

    Public Sub Update(ByVal obj As tblMBL)
        dc.Refresh(RefreshMode.KeepChanges, obj)
        dc.SubmitChanges(ConflictMode.ContinueOnConflict)
    End Sub

    ''' <summary>
    ''' Chỉ lấy danh sách các MBL thỏa điều kiện:
    ''' + Ngày dự kiến tàu chạy phải > ngày hiện tại
    ''' + Không lấy những MBL của File có ID = id_File
    ''' + Chỉ lấy những MBL của hàng là isExport (hoặc xuất hoặc nhập)
    ''' </summary>
    ''' <param name="isExport"></param>
    ''' <param name="id_File"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetRemainMBLList(ByVal isExport As Boolean, ByVal id_File As Integer) As IQueryable(Of tblMBL)
        Dim q = From p In dc.HT_FnGetRemainMBLList(id_File), p1 In dc.tblMBLs, p2 In dc.tblFileMBLs
                Where p.ID_MBL = p1.ID_MBL And p.ID_MBL = p2.ID_MBL And p2.tblFile.IsExport = isExport
                Select p1
        Return q
    End Function

    ''' <summary>
    ''' Chọn object MBL theo MBL No.
    ''' </summary>
    ''' <param name="strMBLNo"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function SelectMBLByMBLNo(ByVal strMBLNo As String) As tblMBL
        Dim obj = dc.tblMBLs.SingleOrDefault(Function(p As tblMBL) p.MBLNo = strMBLNo)
        Return obj
    End Function

    ''' <summary>
    ''' Chọn object MBL theo các thông tin khác
    ''' Nếu không tồn tại thì tạo mới rồi chọn
    ''' </summary>
    ''' <param name="objMBL"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function SelectMBLByInfo(ByVal objMBL As tblMBL) As tblMBL
        Dim obj = dc.tblMBLs.SingleOrDefault(Function(p As tblMBL) p.MBLNo = objMBL.MBLNo)
        If obj Is Nothing Then
            obj = Insert(objMBL)
        End If
        Return obj
    End Function

    ''' <summary>
    ''' Kiểm tra xem nếu id_MBL có được dùng ở File khác (khác với ID_File)
    ''' Nếu có thì bỏ qua
    ''' Nếu không thì xóa đi MBL có id_MBL đi
    ''' </summary>
    ''' <param name="id_File"></param>
    ''' <param name="objMBL"></param>
    ''' <remarks></remarks>
    Public Sub RemoveMBLByFile(ByVal id_File As Integer, ByVal objMBL As tblMBL)
        Dim query = From p In dc.tblFileMBLs
                    Where p.ID_MBL = objMBL.ID_MBL And p.ID_File <> id_File
                    Select p
        'Nếu objMBL không dùng bởi các File khác thì xóa đi
        If query.Count = 0 Then
            'Xóa Voyage của MBL trước là tự động xóa MBl (do thiết lập cascade)
            dc.tblVoyages.DeleteOnSubmit(objMBL.tblVoyage)
            dc.SubmitChanges()
        End If
    End Sub
End Class
